/**
 * @file 异步任务相关类型定义
 * @description 定义异步任务的数据结构和接口类型，供主进程和渲染进程共享使用
 * @author AI Assistant
 * @version 1.0.0
 * @since 2025-10-30
 */

/**
 * 任务状态枚举
 */
export enum TaskStatus {
  /** 待处理 */
  PENDING = 'pending',
  /** 进行中 */
  IN_PROGRESS = 'in-progress',
  /** 已完成 */
  COMPLETED = 'completed',
  /** 失败 */
  FAILED = 'failed'
}

/**
 * 任务类型枚举
 */
export enum TaskType {
  /** 数据导出 */
  DATA_EXPORT = 'data_export',
  /** 批量处理 */
  BATCH_PROCESSING = 'batch_processing',
  /** 同步操作 */
  SYNC_OPERATION = 'sync_operation',
  /** 其他 */
  OTHER = 'other'
}

/**
 * 异步任务数据结构（用于IPC传输）
 */
export interface AsyncTask {
  /** 主键ID，自增 */
  id?: number
  /** 任务类型 */
  task_type: string
  /** 业务数据（JSON对象） */
  business_data: Record<string, any>
  /** 任务状态 */
  status: TaskStatus
  /** 进度百分比 (0-100) */
  progress?: number
  /** 错误信息 */
  error_message?: string | null
  /** 任务结果数据（JSON对象） */
  result_data?: Record<string, any> | null
  /** 创建时间 (JavaScript 时间戳，毫秒) */
  created_at: number
  /** 更新时间 (JavaScript 时间戳，毫秒) */
  updated_at: number
  /** 开始时间 (JavaScript 时间戳，毫秒) */
  started_at?: number | null
  /** 完成时间 (JavaScript 时间戳，毫秒) */
  completed_at?: number | null
}

/**
 * 创建异步任务的输入参数
 */
export interface CreateAsyncTaskInput {
  /** 任务类型 */
  task_type: TaskType | string
  /** 业务数据 */
  business_data: Record<string, any>
  /** 初始状态（可选，默认为 PENDING） */
  status?: TaskStatus
}

/**
 * 更新异步任务的输入参数
 */
export interface UpdateAsyncTaskInput {
  /** 任务ID */
  id: number
  /** 任务状态 */
  status?: TaskStatus
  /** 进度百分比 */
  progress?: number
  /** 错误信息 */
  error_message?: string | null
  /** 任务结果数据 */
  result_data?: Record<string, any> | null
  /** 业务数据更新 */
  business_data?: Record<string, any>
}

/**
 * 查询异步任务的参数
 */
export interface QueryAsyncTaskParams {
  /** 任务类型过滤 */
  task_type?: TaskType | string
  /** 任务状态过滤（单个或多个） */
  status?: TaskStatus | TaskStatus[]
  /** 创建时间范围 - 开始 (JavaScript 时间戳，毫秒) */
  created_after?: number
  /** 创建时间范围 - 结束 (JavaScript 时间戳，毫秒) */
  created_before?: number
  /** 分页 - 限制数量 */
  limit?: number
  /** 分页 - 偏移量 */
  offset?: number
  /** 排序字段 */
  sortBy?: 'created_at' | 'updated_at' | 'started_at' | 'completed_at' | 'progress'
  /** 排序方向 */
  sortOrder?: 'asc' | 'desc'
}

/**
 * 数据库操作结果类型
 */
export interface DatabaseResult<T = any> {
  success: boolean
  data?: T
  error?: string
  count?: number
}
